/**
 * Principal
 *
 * @version
 */

(function() {

    /**
     * Variaveis
     */
    var Dom = YAHOO.util.Dom,
    Event = YAHOO.util.Event;

    var _oUIAppLayout = null;
    var _oLayoutProject = null;
    var _oLayoutComposer = null;

    /**
     * Inicializa a aplicacao
     */
    Event.onDOMReady(function() {

        _oUIAppLayout = new UIAppLayout();
        _oUIAppLayout.loadHeader();
        _oUIAppLayout.loadBody();
        _oUIAppLayout.loadDialogs();
    });

    /**
     * Variavel para utilizacao das instancias unicas de modelo de negocio
     * criadas durante a inicializacao da aplicacao
     */
    ModelInstance = {

        getLayoutProject: function() {
            if(_oLayoutProject == null) {
                _oLayoutProject = new LayoutProject();
            }
            return _oLayoutProject;
        },
        
        getLayoutComposer: function() {
            if(_oLayoutComposer == null) {
                _oLayoutComposer = new LayoutComposer();
            }
            return _oLayoutComposer;
        }

    };

    /**
     * Variavel para utilizacao das instancias de interface grafica
     * criadas durante a inicializacao da aplicacao
     */
    UIInstance = {

        getUIMenuInstance: function() {
            return _oUIAppLayout.getUIMenu();
        },
        getUITreeViewInstance: function() {
            return _oUIAppLayout.getUIElementsPanel().getUITreeView();
        },
        getUIPropertiesInstance: function() {
            return _oUIAppLayout.getUIPropertiesPanel().getUIProperties();
        },
        getUIMapLayoutAreaInstance: function() {
            return _oUIAppLayout.getUIMapLayoutAreaPanel().getUIMapLayoutArea();
        },
        getUIPaletteInstance: function() {
            return _oUIAppLayout.getUIPalettePanel().getUIPalette();
        },
        getUICreateProjectDialogInstance: function() {
            return _oUIAppLayout.getUICreateProjectDialog();
        },
        getUIOpenProjectDialogInstance: function() {
            return _oUIAppLayout.getUIOpenProjectDialog();
        },
        getUICloseProjectDialogInstance: function() {
            return _oUIAppLayout.getUICloseProjectDialog();
        },
        getUISaveProjectDialogInstance: function() {
            return _oUIAppLayout.getUISaveProjectDialog();
        },
        getUIPrintLayoutDialogInstance: function() {
            return _oUIAppLayout.getUIPrintLayoutDialog();
        },
        getUIPreferencesDialogInstance: function() {
            return _oUIAppLayout.getUIPreferencesDialog();
        },
        getUIFontDialogInstance: function() {
            return _oUIAppLayout.getUIFontDialog();
        }

    };

    /**
     * Variavel utilizada para a inicializacao do objeto SVG
     * ao carregar a aplicacao
     */
    SVG = {

        startSVGObject: function() {
            _oUIAppLayout.getUIMapLayoutAreaPanel().getUIMapLayoutArea().initSVGLayout();
        }
    };

    /**
     * Variavel que define os tipos de elementos
     */
    EElementType = {
        eNone : "none",
        eTLayout : "tlayout",
        eTImage : "timage",
        eTLabel : "tlabel"
    };

    /**
     * Variavel que define os tipos de mensagens informativas durante
     * o uso da aplicacao
     */
    EAppInfoMessages = {
        eProjectOpened : "Projeto enviado!",
        eProjectCreated : "Projeto criado!",
        eOpenProjectFailed : "Nao foi possivel abrir o projeto.\n\nMotivo: ",
        eCreateProjectFailed : "Nao foi possivel criar o projeto.\n\nMotivo: ",
        eCommunicationServerFailed : "A comunicacao com o servidor falhou.",
        eGenerateMapLayoutFailed : "Nao foi possivel imprimir o layout do mapa.\n\nMotivo: ",
        eSerialSVGContentFailed : "Serializacao de conteudo SVG nao suportado.",
        eProjectSavedAt : "Salvo em ",
        eSaveAndGainProjectCopy : "Deseja salvar e obter uma copia do projeto em uso?",
        eProjectIsNotOpen : "Nenhum projeto esta aberto!",
        eConvertUnavailable : "Conversor indisponivel para o sistema operacional do servidor.",
        ePrintLayoutRoutineFailed : "Falha na execucao de impressao do layout."
    };

    /**
     * Variavel que define outros tipos gerais de valores utilizados na aplicacao
     */
    EGeneralTypes = {
        eStrokeDashSolidType : "solido",
        eStrokeDashTracedType : "tracejado",
        eStrokeDashSolidValue : "10,0",
        eStrokeDashTracedValue : "10,5",
        eSVGPositionTop : "top",
        eSVGPositionBottom : "bottom",
        eLayoutOrientPortrait : "portrait",
        eLayoutOrientLandscape : "landscape",
        eNoneExeConvert : "noneexeconvert",
        eUnitPx : "px",
        eDefaultLayoutWidth : "640",
        eDefaultLayoutHeight : "640",
        eURLUserManual : "docs/MANUAL_USO_I3GEO_LAYOUT.pdf",
        eAutoSaveIntervalDefault : "5"
    };

    /**
     * Variavel que define os rotulos mostrados na interface grafica da aplicacao
     */
    EAppLabels = {
        eTLayoutNickName : "layout",
        eTImageNickNamePrefix : "imagem",
        eTLabelNickNamePrefix : "rotulo"
    };

})();
